package com.jl15988.simpletools.appcore.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jl15988.simpletools.appcore.dto.AppDTO;
import com.jl15988.simpletools.appcore.dto.AppQueryDTO;
import com.jl15988.simpletools.appcore.dto.AppRequestDTO;
import org.springframework.web.multipart.MultipartFile;

/**
 * 应用服务接口
 *
 * @author jl15988
 */
public interface AppService {

    /**
     * 分页查询应用列表
     *
     * @param query 查询条件
     * @return 分页结果
     */
    IPage<AppDTO> getAppPage(AppQueryDTO query);

    /**
     * 获取应用详情
     *
     * @param id 应用ID
     * @return 应用详情
     */
    AppDTO getAppDetail(Long id);

    /**
     * 创建应用
     *
     * @param request 应用请求DTO
     * @param icon 应用图标
     * @param appPackage 应用包文件
     * @param screenshots 应用截图
     * @param userId 用户ID
     * @param username 用户名
     * @return 应用ID
     */
    Long createApp(AppRequestDTO request, MultipartFile icon, MultipartFile appPackage, 
                  MultipartFile[] screenshots, Long userId, String username);

    /**
     * 更新应用
     *
     * @param request 应用请求DTO
     * @param icon 应用图标
     * @param appPackage 应用包文件
     * @param screenshots 应用截图
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean updateApp(AppRequestDTO request, MultipartFile icon, MultipartFile appPackage, 
                     MultipartFile[] screenshots, Long userId);

    /**
     * 删除应用
     *
     * @param id 应用ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean deleteApp(Long id, Long userId);

    /**
     * 更新应用状态
     *
     * @param id 应用ID
     * @param status 状态
     * @return 是否成功
     */
    boolean updateAppStatus(Long id, Integer status);

    /**
     * 下载应用
     *
     * @param id 应用ID
     * @param userId 用户ID（可为空，表示未登录用户）
     * @param request HTTP请求
     * @return 应用包路径
     */
//    String downloadApp(Long id, Long userId, HttpServletRequest request);

    /**
     * 提交应用审核
     *
     * @param id 应用ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean submitToAudit(Long id, Long userId);
} 